Stress Testing
پياده كنندگان برنامه های وب می توانند از ابزارهای تست متعدد به همراه برخی امكانات ارائه شده در فريمورك دات نت برای پروفايل كردن برنامه های ASP.NET استفاده نمايند . اغلب ، گذر از مرحله تست و اعمال يك پل ارتباطی بين نتايج تست و برنامه وب كار زمان گيری است . به عنوان نمونه ممكن است در مرحله تست بتوان اطلاعات مهمی نظير TTFB ( برگرفته شده از Average Time to first byte ) كه نشان دهنده مدت زمان ارسال درخواست و دريافت اولين بايت از سرويس دهنده است و يا TTLB ( برگرفته شده از Average Time to last byte ) كه نشان دهنده زمان ارسال درخواست و دريافت آخرين بايت از سرويس دهنده است را ركورد و ثبت نمود . ولی بدون استفاده از يك روش دقيق و صحيح اندازه گيری ، تشخيص پارامترهای تاثيرگذار در كاهش كارآئی يك برنامه وب كار مشكلی خواهد بود .
به عنوان مثال ، كاهش كارآئی يك برنامه وب ممكن است مربوط به سرعت پائين هارد ديسك ، تنظيمات ضعيف ASP.NET ، عدم طراحی صحيح بانك اطلاعاتی و يا عدم طراحی مناسب برنامه باشد . در واقع، تست كارآئی علم و دانش مختص به خود را دارد .
برای انجام اكثر تست های اوليه ، می توان از يك سرويس دهنده اختصاصی و مجموعه ای از سرويس گيرندگان استفاده نمود كه از طريق يك شبكه سريع ايزوله شده با سرويس دهنده وب تعامل برقرار می نمايند . بدين منظور می توان از يك ابزار توليد load كه بطور اتوماتيك مجموعه ای از صفحات را از سرويس دهنده درخواست می نمايد استفاده كرد تا يك لود سنگين شبيه سازی گردد . ACT ( برگرفته شده از Application Center Test ) و WAST ( برگرفته شده از Web Applications Stress Tool ) دو نمونه متداول در اين زمينه می باشند .
با استفاده از ابزارهای فوق می توان شرايط حاكم بر يك برنامه وب در دنيای واقعی را شبيه سازی نمود ( تداوم درخواست صفحات از طريق چندين اتصال همزمان ) . اكثر ابزارهای توليد load ، فعاليت ها و كارهائی را كه انجام می دهند ثبت می نمايند تا امكان بررسی آنها توسط طراحان و پياده كنندگان وجود داشته باشد .
علاوه بر برنامه های فوق ، می توان نتايج را با استفاده از Windows performance counters ثبت و مشاهده كرد .
performance counter
برنامه performance counters ويندوز يكی از ابزارهای متداول موجود برای اندازه گيری كارآئی يك برنامه می باشد . با استفاده از برنامه فوق می توان به تعداد دلخواه counter را اضافه و يا مستقيما" كارآئی را از طريق جعبه محاوره ای system performance اندازه گيری كرد .
برای فعال كردن برنامه فوق می توان از مسير Settings|Control Panel |Administrative Tools |Performance استفاده كرد. اين برنامه به صورت پيش فرض صرفا" كارآئی پردازشگر اصلی سيستم و ديسك را اندازه گيری می نمايد .
پس از نصب ASP.NET ، مجموعه ای counter مفيد برای رديابی و ارزيابی كارآئی برنامه های وب نيز نصب می گردد . برای اضافه كردن counter ، با كليك (سمت راست) بر روی ليست counter و انتخاب properties ، می توان گزينه های مختلفی را پيكربندی نمود ( نظير تغيير شكل ظاهری نمودار و نحوه ثبت اطلاعات در قالب يك گزارش ) .
يكی از مهمترين گزينه ها بخش مربوط به Data است كه با استفاده از آن می توان به ليست موجود يك counter را اضافه و يا از آن حذف نمود . برای شروع ، می توان تمامی كانتر های پيش فرض را حذف و با استفاده از گزينه Add موارد دلخواه را به ليست اضافه نمود .
شكل 1 : اضافه كردن يك counter جديد
در جعبه محاوره ای Add Counter ، چندين ويژگی مهم از جمله امكان مشخص كردن نام كامپيوتر وجود دارد . به عبارت ديگر ، شما می توانيد كارآئی يك كامپيوتر راه دور را مانيتور نمائيد . مانيتورينگ كارآئی سرويس دهنده وب از طريق يك سرويس گيرنده ايده آل است چراكه احتمال تاثير عملكرد مانيتورينگ بر روی سرويس دهنده از بين خواهد رفت . ويژگی مهم بعدی ، performance object است كه با استفاده از آن می توان يك گروه counter را متناسب با شی مورد نظر انتخاب نمود . گروه ASP.NET اطلاعات كاملی را در خصوص كارآئی كلی برنامه های ASP.NET ارائه می نمايد . اين در حالی است كه گروه ASP.NET Application اطلاعاتی را در رابطه با يك برنامه وب خاص ارائه می نمايد .
برخی از انواع مفيد كانترها به همراه گروه ، نام counter و عملكرد هر يك از آنها در جدول 1 نشان داده شده است .
سطرهای ستاره دار، كانترهائی را مشخص می نمايد كه با استفاده از آنها می توان اشكال زدائی يك مسئله را انجام داد . ساير سطرها ، كانترهائی را نشان می دهد كه استفاده از آنها همواره مفيد می باشد .
گروه
|
counter
|
عملكرد
|
processor |
% CPU Utilization |
درصد استفاده از CPU را نشان می دهد . در صورتی كه استفاده از CPU در يك بازه زمانی صرفنظر از load سرويس گيرنده ثابت باقی بماند ، نشان دهنده انتظار يك برنامه برای استفاده از يك منبع محدود است .
|
ASP.NET |
Requests Queued |
تعداد درخواست های در انتظار پردازش را مشخص می نمايد . از counter فوق برای مشخص كردن حداكثر load سرويس دهنده وب استفاده می گردد .
|
ASP.NET |
* Application Restarts ,
Worker Process Restarts |
تعداد دفعاتی كه پردازه ASP.NET راه اندازی مجدد و يا reset می گردد را مشخص می نمايد . اين counter نشاندهنده بروز مسائل ناخواسته است.
|
ASP.NET Applications |
Requests/Sec |
حداكثر توان عملياتی برنامه وب را مشخص می نمايد .
|
ASP.NET Applications |
* Errors Total |
تعداد خطاء توليد شده توسط يك برنامه وب را مشخص می نمايد . مقدار اين counter در عمل می بايست صفر و يا نزديك به صفر باشد .
|
ASP.NET Applications |
Pipeline Instance Count |
تعداد درخواست pipeline يك برنامه را مشخص می نمايد و از آن برای مشخص شدن حداكثر درخواست همزمانی كه می توان به آنها پاسخ داده شود ، استفاده می گردد .
در صورتی كه مقدار اين counter تحت يك load پائين باشد ، نشان دهنده استفاده مطلوب از CPU است .
|
System |
* Context Switches/sec |
پارامتر فوق تعداد دفعات سوئيچينگ thread context را نشان می دهد . در صورتی كه مقدار اين پارامتر زياد باشد ، thread های مختلف برای استفاده از يك منبع محدود با يكديگر رقابت می نمايند .
|
جدول 1 : ليست برخی كانترهای مفيد
دستيابی به كلاس های performance counters از طريق كد
با توجه به اين كه ASP.NET بخشی از فريمورك دات نت است ، پياده كنندگان برنامه های وب می توانند در صفحات وب نوشته شده با استفاده از فناوری ASP.NET به تمامی كلاس های موجود در فريمورك دات نت دستيابی داشته باشند . اين بدان معنی است كه از طريق يك صفحه وب ASP.NET می توان عمليات متعددی نظير پردازش تصاوير ، نوشتن در event log و يا خواندن و انعكاس performance counters در خروجی را انجام داد . گرچه استفاده از امكاناتی از اين قبيل ممكن است چالش های امنيتی مختص به خود را دارا باشد ولی با رعايت نكات ايمنی می توان پتانسيل برنامه های وب را در جهت ارائه خدمات مطلوب و بهينه به كاربران افزايش داد .
به عنوان نمونه می توان يك performance counter جديد را اضافه و يا مقدار متناظر با يك performance counter را بازيابی و در ادامه آن را در يك صفحه وب و يا يك برنامه desktop نمايش داد .
برای استفاده از پتانسيل فوق ، از namespace با نام System.Diagnostics استفاده می گردد . ليست برخی از كلاس های دات نت به منظور تعامل با performance counter در جدول 2 نشان داده شده است .
كلاس
|
عملكرد
|
PerformanceCounter |
ارائه يك counter خاص كه شامل اطلاعاتی نظير نام counter و نوع داده ئی است كه می بايست ثبت گردد .
|
PerformanceCounterCategory |
يك گروه counter را كه شامل يك و يا چندين counter است ، مشخص می نمايد .
|
CounterCreationData |
ارائه داده مورد نياز برای ايجاد يك counter جديد .
|
CounterSample |
ارائه مجموعه ای از اطلاعات ثبت شده توسط counter .
در اين رابطه يك RawValue ( شماره ثبت شده ) ، يك TimeStamp ( زمانی كه مقدار ثبت شده است ) و اطلاعات اضافه ای در رابطه با نوع counter و نحوه خواندن آن را ارائه می نمايد .
|
جدول 2 : ليست برخی كلاس های دات نت برای كار با Performance counter
مثال : نمايش ظرفيت آزاد حافظه فيزيكی در يك صفحه وب
در كد فوق ، ظرفيت آزاد حافظه فيزيكی بر حسب مگابايت در صفحه وب نمايش داده می شود . برای انجام اين كار ، در ابتدا يك نمونه از كلاس PerformanceCounter به همراه نام گروه Memory و counter با نام Available MBytes ايجاد شده است . برای ايجاد يك نمونه از كلاس PerformanceCounter از كد زير استفاده شده است .
Dim perfFreeMem as New PerformanceCounter("Memory", "Available MBytes")
|
بدين ترتيب يك شی با نام perfFreeMem ايجاد كه Performance counter مورد نظر را ارائه می نمايد . برای خواندن مقدار جاری counter از متد NextValue استفاده می گردد تا مقدار بعدی Performance counter را برگرداند . با نسبت دادن مقدار برگردانده شده به خصلت Text كنترل سرويس دهنده Label ، امكان مشاهده آن در خروجی فراهم می گردد .
<%@ Import Namespace = System.Diagnostics %>
Free Memory (in MB):
|
مراحل انجام كار در مثال فوق به شرح زير است :
-
مرحله اول : استفاده از namespace با نام System.Diagnostics در ابتدای برنامه
-
مرحله دوم : ايجاد و مقداردهی مناسب يك نمونه از كلاس PerformanceCounter تا قادر به خواندن counter با نام Available MBytes از گروه Memory باشد .
-
مرحله سوم : نسبت دادن مقدار برگردانده شده توسط متد NextValue به خصلت Text كنترل سرويس دهنده label با نام lblFreeMem
در بخش چهارم به بررسی امكانات caching در ASP.NET 2.0 خواهيم پرداخت .